package com.cyy.test_t_4_;
/**
 * 剑指Offer 面试题40
 * 数组中只出现一次的数字 
 * 题目描述：
 * 一个整型数组里除了两个数字之外，其他的数字都出现了两次。
 * 请写程序找出这两个只出现一次的数字。
 */
public class t_40 {

	public static void main(String[] args) {
		int []a = {1,2,1,2,3,5};
		System.out.println(1^2^2^3);
	}

	static void FindNumsAppearOnce(int [] array,int num1[] , int num2[]) {
        if(array == null || array.length < 2)
        	return;
        
        int resultExclusiveOR = 0;
        for(int i = 0; i < array.length; ++ i){
        	resultExclusiveOR ^= array[i];
        }
        
        int indexOf1 = FindFirstBitIs1(resultExclusiveOR);
        
        for(int j = 0; j < array.length; ++ j){
        	if(IsBit1(array[j],indexOf1)){
        		num1[0] ^= array[j];
        	} else{
        		num2[0] ^= array[j];
        	}
        }
    }
	
	static int FindFirstBitIs1(int num){
		int indexBit = 0;
		while(((num & 1)==0) && (indexBit < 8 * 4)){
			num >>= 1;
			++ indexBit;
		}
		return indexBit;
	}
	static boolean IsBit1(int num,int indexBit){
		num >>= indexBit;
		if((num & 1) == 1) return true;
		return false;
	}
}
